package io.aicn.lowcode.mapper.dbmanager;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import io.aicn.lowcode.entity.dbmanager.DataSource;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 数据源配置Mapper接口
 * 
 * @author lowcode-generator
 * @since 2025-01-25
 */
@Mapper
public interface DataSourceMapper extends BaseMapper<DataSource> {

    /**
     * 根据状态查询数据源列表
     * 
     * @param status 连接状态
     * @return 数据源列表
     */
    @Select("SELECT * FROM dbm_datasource WHERE status = #{status} ORDER BY create_time DESC")
    List<DataSource> selectByStatus(@Param("status") String status);

    /**
     * 根据数据库类型查询数据源列表
     * 
     * @param type 数据库类型
     * @return 数据源列表
     */
    @Select("SELECT * FROM dbm_datasource WHERE type = #{type} ORDER BY create_time DESC")
    List<DataSource> selectByType(@Param("type") String type);

    /**
     * 根据名称模糊查询数据源
     * 
     * @param name 数据源名称
     * @return 数据源列表
     */
    @Select("SELECT * FROM dbm_datasource WHERE name LIKE CONCAT('%', #{name}, '%') ORDER BY create_time DESC")
    List<DataSource> selectByNameLike(@Param("name") String name);

    /**
     * 检查数据源名称是否存在
     * 
     * @param name 数据源名称
     * @param excludeId 排除的ID（用于更新时检查）
     * @return 数量
     */
    @Select("SELECT COUNT(*) FROM dbm_datasource WHERE name = #{name} AND id != #{excludeId}")
    int countByNameExcludeId(@Param("name") String name, @Param("excludeId") Long excludeId);

    /**
     * 查询所有数据源（不包含config字段）
     * 
     * @return 数据源列表
     */
    @Select("SELECT id, name, type, host, port, database_name, username, status, create_time, update_time FROM dbm_datasource ORDER BY create_time DESC")
    List<DataSource> selectAllWithoutConfig();
}